package com.heima.wemedia.service.impl;

import com.alibaba.cloud.commons.lang.StringUtils;
import com.heima.model.common.dtos.ResponseResult;
import com.heima.model.common.enums.AppHttpCodeEnum;
import com.heima.model.wemedia.entity.WmMaterial;
import com.heima.model.wemedia.entity.WmNewsMaterial;
import com.heima.model.wemedia.entity.WmUser;

import com.heima.model.wmLoginDto.WmLoginDto;
import com.heima.utils.common.AppJwtUtil;
import com.heima.wemedia.dao.WmNewsMaterialDao;
import com.heima.wemedia.dao.WmUserDao;
import com.heima.wemedia.service.WmUserService;
import org.jsoup.helper.StringUtil;
import org.springframework.stereotype.Service;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageImpl;
import org.springframework.data.domain.PageRequest;
import org.springframework.util.DigestUtils;

import javax.annotation.Resource;
import java.security.DigestException;
import java.util.HashMap;
import java.util.Map;

/**
 * 自媒体用户表(WmUser)表服务实现类
 *
 * @author makejava
 * @since 2022-04-09 19:14:04
 */
@Service("wmUserService")
public class WmUserServiceImpl implements WmUserService {
    @Resource
    private WmUserDao wmUserDao;
    @Resource
    private WmNewsMaterialDao wmNewsMaterialDao;

    /**
     * 通过ID查询单条数据
     *
     * @param id 主键
     * @return 实例对象
     */
    @Override
    public WmUser queryById(Integer id) {
        return this.wmUserDao.queryById(id);
    }

    /**
     * 分页查询
     *
     * @param wmUser      筛选条件
     * @param pageRequest 分页对象
     * @return 查询结果
     */
    @Override
    public Page<WmUser> queryByPage(WmUser wmUser, PageRequest pageRequest) {
        long total = this.wmUserDao.count(wmUser);
        return new PageImpl<>(this.wmUserDao.queryAllByLimit(wmUser, pageRequest), pageRequest, total);
    }

    /**
     * 新增数据
     *
     * @param wmUser 实例对象
     * @return 实例对象
     */
    @Override
    public WmUser insert(WmUser wmUser) {
        this.wmUserDao.insert(wmUser);
        return wmUser;
    }

    /**
     * 修改数据 收藏
     *
     * @param wmUser 实例对象
     * @return 实例对象
     */
    @Override
    public ResponseResult update(Integer id) {
        WmMaterial wmMaterial = new WmMaterial();
        wmMaterial.setId(id.longValue());
        wmMaterial.setIsCollection(0);
        this.wmUserDao.update(wmMaterial);
        return ResponseResult.okResult(200,"收藏成功");
    }

    /**
     * 通过主键删除数据
     *
     * @param id 主键
     * @return 是否成功
     */
    @Override
    public ResponseResult deleteById(Integer id) {
     WmNewsMaterial wmNewsMaterial= wmNewsMaterialDao.queryByNewsMaterIalId(id);
     if (wmNewsMaterial != null) {
         return ResponseResult.errorResult(200,"有文章使用素材不可以删除");
     }
                this.wmUserDao.deleteById(id);
        return ResponseResult.okResult(200,"删除成功");
    }


    /**
     * 自媒体登录
     *
     * @param dto
     * @return
     */
    @Override
    public ResponseResult login(WmLoginDto dto){
        //1判断用户名密码是否 为空
        if (StringUtils.isBlank(dto.getName()) || StringUtils.isBlank(dto.getPassword())) {
            return ResponseResult.errorResult(AppHttpCodeEnum.PARAM_INVALID, "用户名或密码为空");
        }
        //2 查询数据库 是否含有这个用户查不到为空 就是用户名错
        WmUser wmUser = wmUserDao.queryByUsername(dto.getName());
        if (wmUser == null) {
            return ResponseResult.errorResult(AppHttpCodeEnum.DATA_NOT_EXIST);
        }
        //对比用户名密码
        String pswd = DigestUtils.md5DigestAsHex((dto.getPassword() + wmUser.getSalt()).getBytes());
        if (pswd.equals(wmUser.getPassword())) {
            //真确返回数据 token jwt
            Map<String, Object> map = new HashMap<>();
            map.put("token", AppJwtUtil.getToken(wmUser.getId().longValue()));
            wmUser.setSalt(" ");
            wmUser.setPassword(" ");
            map.put("user", wmUser);
            return ResponseResult.okResult(map);
        } else {
            return ResponseResult.errorResult(AppHttpCodeEnum.LOGIN_PASSWORD_ERROR);
        }
    }
}
